diff -ruN pidgin-mtn/libpurple/protocols/msn/contact.c pidgin-mtn.mine/libpurple/protocols/msn/contact.c
--- pidgin-mtn/libpurple/protocols/msn/contact.c	2007-05-28 23:42:20.000000000 +0100
+++ pidgin-mtn.mine/libpurple/protocols/msn/contact.c	2007-06-02 21:56:46.000000000 +0100
@@ -546,6 +546,7 @@
 	if (msn_parse_addressbook(contact)) {
 		msn_notification_dump_contact(session);
 		msn_set_psm(session);
+		msn_set_currentmedia(session);
 		msn_session_finish_login(session);
 	} else {
 		msn_get_address_book(contact, NULL, NULL);
diff -ruN pidgin-mtn/libpurple/protocols/msn/state.c pidgin-mtn.mine/libpurple/protocols/msn/state.c
--- pidgin-mtn/libpurple/protocols/msn/state.c	2007-05-28 23:42:21.000000000 +0100
+++ pidgin-mtn.mine/libpurple/protocols/msn/state.c	2007-06-02 23:31:05.000000000 +0100
@@ -67,7 +67,7 @@
 
 	mediaNode = xmlnode_new("CurrentMedia");
 	if(mediastr != NULL){
-		xmlnode_insert_data(psmNode,mediastr,strlen(mediastr));
+		xmlnode_insert_data(mediaNode,mediastr,strlen(mediastr));
 	}
 	xmlnode_insert_child(dataNode,mediaNode);
 
@@ -242,6 +242,39 @@
 }
 
 void
+msn_set_currentmedia(MsnSession *session)
+{
+	PurpleAccount *account = session->account;
+	PurplePresence *presence;
+	PurpleStatus *status;
+	MsnCmdProc *cmdproc;
+	MsnTransaction *trans;
+	char *payload;
+	const char *statusline;
+
+	g_return_if_fail(session != NULL);
+	g_return_if_fail(session->notification != NULL);
+
+	cmdproc = session->notification->cmdproc;
+	/*prepare PSM info*/
+	if(session->psm){
+		g_free(session->psm);
+	}
+	/*Get the PSM string from Purple's Status Line*/
+	presence = purple_account_get_presence(account);
+	status = purple_presence_get_active_status(presence);
+	statusline = purple_status_get_attr_string(status, "currentmedia");
+	session->psm = msn_build_psm(NULL, statusline, NULL);
+	payload = session->psm;
+
+	purple_debug_info("b33fc0d3","UUX{%s}\n",payload);
+	trans = msn_transaction_new(cmdproc, "UUX","%d",strlen(payload));
+	msn_transaction_set_payload(trans, payload, strlen(payload));
+	msn_cmdproc_send_trans(cmdproc, trans);
+
+}
+
+void
 msn_change_status(MsnSession *session)
 {
 	PurpleAccount *account;
@@ -283,6 +316,7 @@
 		g_free(msnobj_str);
 	}
 	msn_set_psm(session);
+	msn_set_currentmedia(session);
 }
 
 const char *
diff -ruN pidgin-mtn/libpurple/protocols/msn/state.h pidgin-mtn.mine/libpurple/protocols/msn/state.h
--- pidgin-mtn/libpurple/protocols/msn/state.h	2007-05-19 01:35:30.000000000 +0100
+++ pidgin-mtn.mine/libpurple/protocols/msn/state.h	2007-06-02 21:49:22.000000000 +0100
@@ -60,6 +60,7 @@
 const char *msn_state_get_text(MsnAwayType state);
 
 void msn_set_psm(MsnSession *session);
+void msn_set_currentmedia(MsnSession *session);
 
 /* Parse CurrentMedia string */
 char * msn_parse_currentmedia(const char *cmedia);
